Introduction to Prolog (Lectures 1 & 2)
مقدمة
- الـ Prolog هي لغة برمجة منطقية (Logic Programming).
- بتعتمد على الـ Declarative Programming (البرمجة الوصفية) بدلاً من الـ Procedural (الإجرائية).
- بتستخدم بشكل أساسي في تطبيقات الذكاء الاصطناعي (AI) والأنظمة الخبيرة (Expert Systems).
ايه هي لغة Prolog؟
- ا PROLOG اختصار لـ: PROgramming in LOGic.
- البرنامج في Prolog عبارة عن Knowledgebase (قاعدة معرفة) بتتكون من:
- ا Facts (حقائق): حاجات دايمًا صح.
- ا Rules (قواعد): بتعتمد على شروط تانية عشان تكون صح.
العناصر الأساسية للـ Prolog
1. الـ Facts
بتعبر عن علاقة بين الـ Objects أو خاصية لشيء معين، وبتكون دايمًا صح (Always True).
- مثال علي علاقة:
.likes(aly, hany)-> علي بيحب هاني (حب اخوي). - مثال علي خاصية:
.green(rose)-> الوردة لونها اخضر. - الـ Relation: هي
likes. - الـ Objects: هي
alyوhany.
قواعد كتابة الـ Facts
- اسم العلاقة والـ objects لازم يبدأوا بـ lower-case.
- اسم العلاقة بيتكتب الأول وبعده الـ objects بين قوسين.
- لازم تنتهي بـ Full stop (نقطة
.). - الترتيب مهم:
likes(aly, hany)معناها علي بيحب هاني، مش العكس.
2. الـ Rules
- بتستخدم الرمز
:-اللي معناه IF.- مثال:
parent(X, Y) :- father(X, Y). - معناها ان X هو والد Y لو كان X هو أبو Y.
- مثال:
ملحوظه ملهاش لازمه
- ا parent يعني والد يعني ممكن يبقي اب او ام , اما father يعني اب الي هو parent وفي نفس الوقت male
3. الـ Questions
بتبدأ بالرمز ?- في الـ interpreter.
- الـ Prolog بيدور في قاعدة البيانات من أول سطر لسطر، وبيقارن (Matching) كل Fact مع السؤال.
- لو لقى تطابق تام (نفس الـ Predicate ونفس الـ Arguments) ->
yes، لو ملقهاش ->no.
الـ Predicates
في Prolog، الـ Predicate هو الاسم اللي بنطلقه على الكلمة اللي بتيجي قبل القوسين في أي حقيقة (Fact) أو قاعدة (Rule).
- الـ Facts والـ Rules الاتنين بيُعتبروا تعريفات للـ Predicate.
- الـ Head في الـ Predicate بيتكون من:
- اسم الـ Predicate (الـ Name).
- الـ Arguments (المعاملات/المُدخلات) اللي ممكن تكون ثوابت (Constants) أو متغيرات (Variables).
الـ Variables
- ا Variables لازم تبدأ بـ Capital letter (ا Upper Case) أو
_( underscore) هنعرف معناها قدام. - بنستخدمها لما نكون عايزين نسأل "مين اللي بيحب هاني؟" بدل "هل علي بيحب هاني؟".
- مثال:
?- likes(X, hany). - ا Prolog هيرجع قيمة
X. لو فيه أكتر من حل، بنضغط;عشان نشوف الباقي، وآخر حاجة يرجعno.
الـ Operators
| الرمز | المعنى بالمنطق |
|---|---|
:- |
ا IF (لو) |
, |
ا AND (و) |
; |
ا OR (أو) |
الـ Conjunctions (الربط)
ممكن نربط أكتر من حاجة باستخدام الفاصلة , (AND).
- مثال:
?- likes(mary, X), likes(john, X). - السؤال ده معناه: "هل فيه حاجة Mary و John الاتنين بيحبوها؟".
بيئة العمل (SWI-Prolog)
- بنكتب الـ knowledgebase في ملف ونحفظه بامتداد
.pl(مثلاًfamily.pl). - بنفتح الـ SWI-Prolog ونعمل Consult للملف عشان يحمله:
- بنكتب:
[family].أوconsult(family).(متنساش النقطة في الآخر).
- بنكتب:
- بعد كده نقدر نسأل الأسئلة (Queries).
المقارنات ( Comparison operators)
ممكن نستخدم المقارنات زي أصغر من < في الأسئلة:
- مثال:
?- age(Name, Age), Age < 40. - السؤال ده معناه: "هات لي كل الأسماء اللي سنها أصغر من 40".
قبل ما تدخل علي المحاضره الي بعدها حل امثلة المحاضرة والسكاشن من هنا : Lecture 1 & 2 - Practice